Iniciação à Estatística no R
Professor Fernando Bastos - MAF 105/UFV
Preliminares
O software R é um conjunto integrado de recursos para leitura e manipulação de dados, cálculos e exibição gráfica. O R é um programa baseado em linhas de comando. Isto é, o usuário cria uma linha de código através de uma sequência de palavras e números. Ao digitar a linha no console, o R interpreta e executa a ação codificada na linha. Também é possível informar para R, um conjunto de linhas de uma única vez, que conhecemos como script. Ao processar o script no console, o R irá ler a primeira linha, interpretar e executar. Só depois que o processamento da primeira linha terminar, é que a segunda linha será lida, interpretada e executada. Esta sequência segue, até que todo o script tenha sido processado.
No caso do R, a linguagem utilizada recebe o mesmo nome: linguagem R. A linguagem R possui regras próprias, que chamamos de sintaxe. Estas regras precisam ser seguidas para assegurar que o programa interprete e processe as linhas com sucesso.
Após instalar o software R e abrir o programa veremos algo semelhante a:
Apesar de ser simples utilizar o R diretamente do seu console raiz, existe um compilador que é mais atrativo. O RStudio é o melhor ambiente disponível para programação em R. Ao abrir o RStudio, você verá 4 ambientes. Observe a figura abaixo.
Esses quadrantes representam o editor, o console, o environment e o output. Eles vêm nesta ordem, e depois você pode organizá-los da forma que preferir.
Listamos abaixo as funções dos principais painéis:
- Editor/Scripts: é onde escrevemos nossos códigos.
- Console: é onde rodamos o código e recebemos as saídas. O R vive aqui!
- Environment: painel com todos os objetos criados na sessão.
- Files: mostra os arquivos no diretório de trabalho. É possível navegar entre diretórios.
- Plots: painel onde os gráficos serão apresentados.
- Help: janela onde a documentação das funções serão apresentadas.
- History: painel com um histórico dos comandos rodados.
Conhecer atalhos ajuda bastante quando estamos programando no RStudio. Veja os principais:
- CTRL+ENTER: roda a linha selecionada no script. Os atalhos mais utilizado.
- ALT+-: (<-) sinal de atribuição. Você usará o tempo todo.
- CTRL+SHIFT+M: (%>%) operador pipe. Guarde esse atalho, você usará bastante.
- CTRL+1: altera cursor para o script.
- CTRL+2: altera cursor para o console.
- CTRL+ALT+I: cria um chunk no R Markdown.
- ALT+SHIFT+K: janela com todos os atalhos disponíveis.
Vamos agora começar a trabalhar!
Na linguagem R, não é necessário declarar uma variável antes dela ser criada. O programa já tenta determinar a melhor classe com base na primeira vez que algo for atribuído à variável. Vamos rodar a seguinte linha:
O sinal “=” é a representação do termo atribuição, e pode ser substituído pelo sinal “<-”. Portanto, o comando abaixo equivale ao comando anterior:
Os comandos acima são equivalentes e podem ser interpretados como:
atribua o valor 1 à variável x. Ao criar a variável
x, o R irá definir x como numérico e armazenar
numa estrutura de vetor, pois o 1 é claramente um número. Vetor é a
estrutura mais simples que uma variável pode assumir, e somente pode
assumir um mesmo tipo de dados. No exemplo:
A variável a será automaticamente definida pelo R como um
vetor numérico. O principal atributo de uma estrutura do tipo vetor é o
comprimento. O vetor a, por exemplo, é um vetor de
comprimento um, ou seja, contém apenas um elemento. Isto pode ser
comprovado através do seguinte comando:
## [1] 1
Note, que quando você quer criar um vetor com mais de um elemento, é
necessário utilizar a função c(). A letra c
vem de components, assim, ao utilizar a função
c() você está informando ao R que construa um vetor com os
componentes listados dentro da função.
O R trabalha com padrão internacional de separação decimal e separação de colunas. A separação decimal é “.” (ponto). E a separação de coluna é “,” (vírgula).
Matrizes nada mais são que combinações de vetores com o mesmo
comprimento e tipo de dado. As variáveis estruturadas como matriz
possuem portanto uma característica que o vetor não tem: dimensão. A
dimensão é uma característica que indica quantas linhas e quantas
colunas a matriz possui. Vamos criar uma matriz e armazená-la na
variável m1:
O comando dim() retorna a dimensão de uma matriz. Antes de
rodar esse comando para a matriz recém criada m1, qual a
dimensão desta matriz? Se você respondeu 2 x 3, acertou!
Agora rode o comando abaixo e tire a prova:
## [1] 2 3
Dataframe é uma condição especial de combinação lado a lado de vetores. Ao contrário das matrizes, o dataframe não exige que os vetores tenham os mesmos tipos de dados. Assim, por exemplo, a primeira coluna do dataframe pode ser numérica, e a segunda coluna pode ser de texto e a terceira coluna com data. O R possui alguns dataframes que vem automaticamente quando o software é instalado. Estes dataframes são geralmente usados como exemplos nos tutoriais e arquivos de ajuda. Uma dessas bases é o mtcars.
Para carregarmos esta base de dados basta digitar:
Após digitar o comando acima em seu console, você terá criado uma
variável na memória chamada mtcars contendo os dados em questão. Como
exemplo, vamos usar o comando head() para visualizar as
colunas deste dataframe e as 6 primeiras linhas:
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
Visualizando apenas as 6 primeiras linhas do dataframe mtcars podemos perceber que este é a estrutura de dados que se assemelha às planilhas eletrônicas como Excel. Assim, podemos entender o dataframe como sequência de observações (linhas) de determinadas variáveis (colunas). Assim como as matrizes, os dataframes também possuem dimensão, e também podemos verificar a dimensão através do comando dim().
No script abaixo, seguem outros comandos úteis para serem usados com os dataframes:
## [1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear"
## [11] "carb"
## mpg cyl disp hp
## Min. :10.40 Min. :4.000 Min. : 71.1 Min. : 52.0
## 1st Qu.:15.43 1st Qu.:4.000 1st Qu.:120.8 1st Qu.: 96.5
## Median :19.20 Median :6.000 Median :196.3 Median :123.0
## Mean :20.09 Mean :6.188 Mean :230.7 Mean :146.7
## 3rd Qu.:22.80 3rd Qu.:8.000 3rd Qu.:326.0 3rd Qu.:180.0
## Max. :33.90 Max. :8.000 Max. :472.0 Max. :335.0
## drat wt qsec vs
## Min. :2.760 Min. :1.513 Min. :14.50 Min. :0.0000
## 1st Qu.:3.080 1st Qu.:2.581 1st Qu.:16.89 1st Qu.:0.0000
## Median :3.695 Median :3.325 Median :17.71 Median :0.0000
## Mean :3.597 Mean :3.217 Mean :17.85 Mean :0.4375
## 3rd Qu.:3.920 3rd Qu.:3.610 3rd Qu.:18.90 3rd Qu.:1.0000
## Max. :4.930 Max. :5.424 Max. :22.90 Max. :1.0000
## am gear carb
## Min. :0.0000 Min. :3.000 Min. :1.000
## 1st Qu.:0.0000 1st Qu.:3.000 1st Qu.:2.000
## Median :0.0000 Median :4.000 Median :2.000
## Mean :0.4062 Mean :3.688 Mean :2.812
## 3rd Qu.:1.0000 3rd Qu.:4.000 3rd Qu.:4.000
## Max. :1.0000 Max. :5.000 Max. :8.000
## mpg cyl disp hp drat wt qsec vs am gear carb
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.7 0 1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.9 1 1 5 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.5 0 1 5 4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.5 0 1 5 6
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.6 0 1 5 8
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.6 1 1 4 2
No script acima aproveitamos para apresentar a sinalização de
comentário. Toda linha no R iniciada com o # não é
interpretada pelo console. Assim, o símbolo # é usado para
incluirmos comentários em nosso código. Veja que no script, cada linha
iniciada pelo sinal # explica o comando seguinte.
Podemos acessar qualquer registro dentro do dataframe utilizando a mesma notação de matrizes:
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21 6 160 110 3.9 2.62 16.46 0 1 4 4
## [1] 6
## [1] 160.0 160.0 108.0 258.0 360.0 225.0 360.0 146.7 140.8 167.6 167.6 275.8
## [13] 275.8 275.8 472.0 460.0 440.0 78.7 75.7 71.1 120.1 318.0 304.0 350.0
## [25] 400.0 79.0 120.3 95.1 351.0 145.0 301.0 121.0
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## mpg cyl disp hp
## Mazda RX4 21.0 6 160.0 110
## Mazda RX4 Wag 21.0 6 160.0 110
## Datsun 710 22.8 4 108.0 93
## Hornet 4 Drive 21.4 6 258.0 110
## Hornet Sportabout 18.7 8 360.0 175
## Valiant 18.1 6 225.0 105
## Duster 360 14.3 8 360.0 245
## Merc 240D 24.4 4 146.7 62
## Merc 230 22.8 4 140.8 95
## Merc 280 19.2 6 167.6 123
## Merc 280C 17.8 6 167.6 123
## Merc 450SE 16.4 8 275.8 180
## Merc 450SL 17.3 8 275.8 180
## Merc 450SLC 15.2 8 275.8 180
## Cadillac Fleetwood 10.4 8 472.0 205
## Lincoln Continental 10.4 8 460.0 215
## Chrysler Imperial 14.7 8 440.0 230
## Fiat 128 32.4 4 78.7 66
## Honda Civic 30.4 4 75.7 52
## Toyota Corolla 33.9 4 71.1 65
## Toyota Corona 21.5 4 120.1 97
## Dodge Challenger 15.5 8 318.0 150
## AMC Javelin 15.2 8 304.0 150
## Camaro Z28 13.3 8 350.0 245
## Pontiac Firebird 19.2 8 400.0 175
## Fiat X1-9 27.3 4 79.0 66
## Porsche 914-2 26.0 4 120.3 91
## Lotus Europa 30.4 4 95.1 113
## Ford Pantera L 15.8 8 351.0 264
## Ferrari Dino 19.7 6 145.0 175
## Maserati Bora 15.0 8 301.0 335
## Volvo 142E 21.4 4 121.0 109
## mpg cyl disp hp
## Mazda RX4 21.0 6 160 110
## Mazda RX4 Wag 21.0 6 160 110
## Datsun 710 22.8 4 108 93
Outro recurso poderoso do R são os filtros. Você pode tanto usar a
notação de [] ou então a função subset().
Vamos ver alguns exemplos de filtros. No exemplo 1, imagine que queremos
separar as linhas que possuem o valor 4 na variável cyl.
Podemos usar a função subset() ou a notação
[]:
## mpg cyl disp hp drat wt qsec vs am gear carb
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
## mpg cyl disp hp drat wt qsec vs am gear carb
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
Agora, imagine que queremos as variáveis mpg e
hp das observações que possuem o valor 4 na variável
cyl:
## mpg hp
## Datsun 710 22.8 93
## Merc 240D 24.4 62
## Merc 230 22.8 95
## Fiat 128 32.4 66
## Honda Civic 30.4 52
## Toyota Corolla 33.9 65
## Toyota Corona 21.5 97
## Fiat X1-9 27.3 66
## Porsche 914-2 26.0 91
## Lotus Europa 30.4 113
## Volvo 142E 21.4 109
## mpg hp
## Datsun 710 22.8 93
## Merc 240D 24.4 62
## Merc 230 22.8 95
## Fiat 128 32.4 66
## Honda Civic 30.4 52
## Toyota Corolla 33.9 65
## Toyota Corona 21.5 97
## Fiat X1-9 27.3 66
## Porsche 914-2 26.0 91
## Lotus Europa 30.4 113
## Volvo 142E 21.4 109
A última estrutura de dados que iremos ver são as listas. Listas funcionam como um varal. Num varal podemos pendurar vários tipos de coisas. Você pode pendurar roupas, quadros, cadeira, fotos e várias outras coisas que você nem imagina. No R, a lista funciona da mesma forma. Você pode incluir numa lista diferentes dados e estruturas.
## [[1]]
## [1] 1
##
## [[2]]
## [1] 1 2 3
##
## [[3]]
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
Para recuperar o objeto de uma lista, podemos usar a notação
[[ ]].
## [1] 1 2 3
Ao longo deste capítulo, criamos na memória do nosso computador várias variáveis. Você consegue se lembrar de todas elas? Não se preocupe. Existe uma função que faz isto para você:
## [1] "a" "dados" "m1" "mtcars" "x"
E se não quisermos mais a variável x? Sem problemas,
podemos deletar através do comando rm():
Se quiser excluir todas as variáveis que você criou na memória, basta usar o comando:
Objetos atômicos
Existem cinco classes básicas ou “atômicas” no R:
- character
- numeric
- integer
- complex
- logical
Veja alguns exemplos:
## [1] "a"
## [1] "1"
## [1] "positivo"
## [1] "Error: objeto x não encontrado"
## [1] 1
## [1] 0.1
## [1] 0.95
## [1] 3.141593
## [1] 1
## [1] 5
## [1] 10
## [1] 2+5i
## [1] TRUE
## [1] FALSE
Para saber a classe de um objetivo, você pode usar a função
class().
## [1] "numeric"
## [1] "character"
## [1] "logical"
Vetores
Vetores no R são os objetos mais simples que podem guardar objetos atômicos.
## [1] 1 2 3 4
## [1] "a" "b" "c"
Um vetor tem sempre a mesma classe dos objetos que guarda.
## [1] "numeric"
## [1] "character"
De forma bastante intuitiva, você pode fazer operações com vetores.
## [1] 0 1 2 3
Quando você faz vetor1 - 1, o R subtrai 1
de cada um dos elementos do vetor. O mesmo acontece quando você faz
qualquer operação aritmética com vetores no R.
Você também pode fazer operações que envolvem mais de um vetor:
## [1] 1 4 9 16
Neste caso, o R irá alinhar os dois vetores e multiplicar elemento por elemento. Isso pode ficar um pouco confuso quando os dois vetores não possuem o mesmo tamanho:
## [1] 1 4 9 4
O R alinhou os dois vetores e, como eles não possuíam o mesmo tamanho, foi repetindo o vetor menor até completar o vetor maior. Esse comportamento é chamado de reciclagem e é útil para fazer operações elemento por elemento (vetorizadamente), mas às vezes pode ser confuso. Com o tempo, você aprenderá a se aproveitar dele.
Misturando objetos
Vetores são homogêneos
Os elementos de um vetor são sempre da mesma classe. Ou todos são numéricos, ou são todos character, ou todos são lógicos etc. Não dá para ter um número e um character no mesmo vetor, por exemplo.
Se colocarmos duas ou mais classes diferentes dentro de um mesmo vetor,
o R vai forçar que todos os elementos passem a pertencer à mesma classe.
O número 1.7 viraria "1.7" se fosse colocado
ao lado de um "a".
A ordem de precedência é:
DOMINANTE
character > complex > numeric > integer > logical
RECESSIVO
Forçando classes explicitamente
Você pode coagir um objeto a ser de uma classe específica com as funções
as.character(), as.numeric(),
as.integer() e as.logical(). É equivalente à
função convert() do SQL.
## [1] "integer"
## [1] 0 1 2 3 4
## [1] FALSE TRUE TRUE TRUE TRUE
## [1] "0" "1" "2" "3" "4"
Se o R não entender como coagir uma classe na outra, ele soltará um
warning informado que colocou NA no lugar.
## [1] NA NA NA
Observação
O NA tem o mesmo papel que o null do SQL. Porém, há um NULL no R também, com diferenças sutis que vamos abordar mais adiante.
Fatores
Fatores podem ser vistos como vetores de inteiros que possuem rótulos (levels).
## [1] M H H H M M H
## Levels: H M
## [1] 2 1 1 1 2 2 1
Eles são úteis para representar uma variável categórica (nominal e
ordinal). Na modelagem, eles serão tratados de maneira especial em
funções como lm() e glm().
A função levels() retorna os rótulos do fator:
## [1] "H" "M"
Quando um vetor de números está como factor, ao tentar transformá-lo em numeric, você receberá um vetor de inteiros que não tem nada a ver com os valores originais!
## [1] 3 5 5 4 3 1 2
Para evitar isso, use as.character() antes de
transformar para número.
## [1] 10 55 55 12 10 -5 -90
Valores especiais
Existem valores reservados para representar dados faltantes, infinitos, e indefinições matemáticas.
- NA (Not Available)
significa dado faltante/indisponível. É o
nulldo SQL ou o.do SAS. ONAtem uma classe, ou seja, podemos terNAnumeric,NAcharacter etc. - NaN (Not a Number)
representa indefinições matemáticas, como 0/0 e
log(-1). Um NaN é um NA, mas a
recíproca não é verdadeira.
- Inf (Infinito)
é um número muito grande ou o limite matemático, por exemplo,
1/0 e 10^310. Aceita sinal negativo
-Inf.
- NULL
representa a ausência de informação. Conceitualmente, a diferença entre
NAeNULLé sutil, mas, no R, oNAestá mais alinhado com os conceitos de estatística (ou como gostaríamos que os dados faltantes se comportassem em análise de dados) e oNULLestá em sintonia com comportamentos de lógica de programação. - Use as funções
is.na(),is.nan(),is.infinite()eis.null()para testar se um objeto é um desses valores.
## [1] TRUE FALSE FALSE FALSE FALSE TRUE
## [1] TRUE FALSE FALSE FALSE FALSE FALSE
Projetos no R
Uma funcionalidade importante é a criação de projetos, permitindo dividir o trabalho em múltiplos ambientes, cada um com o seu diretório, documentos e workspace.
Para criar um projeto, clique em New Project… no Menu File. Na caixa de diálogo que aparecerá, clique em New Directory para criar o projeto em uma nova pasta ou Existing Directory para criar em uma pasta existente. Se você tiver o Git instalado, você também pode usar projetos para conectar com repositórios do Github e outras plataformas de desenvolvimento. Para isso, basta clicar em Version Control.
Você conseguirá utilizar o RStudio mesmo sem definir o espaço de trabalho. No entanto, existem alguns benefícios quando quando definimos o espaço de trabalho:
- Toda análise (tabelas e gráficos) quando exportada é salva automaticamente na pasta vinculada ao espaço de trabalho.
- O RStudio enxerga automaticamente os arquivos existentes dentro da pasta sem a necessidade de informar o endereço completo quando realizar uma manipulação de arquivo (ex: importar uma planilha).
- Tem a opção de salvar o histórico (History) e as variáveis armazenadas na memória (Environment).
Importação de Dados
Vamos introduzir os principais pacotes para importar dados para o R. Mostraremos como importar dados de arquivos de texto e de planilhas do excel. Antes é importante saber o ciclo da ciência de dados:
Grande parte dos dados que utilizaremos em nossas análises estarão salvos em planilhas eletrônicas como Excel, LibreOffice e outros. Embora seja possível importar arquivos com extensão .xls e .xlsx, recomendo que seja utilizado sempre a extensão genérica .csv (comma-separeted value) ou . txt. Todo arquivo do tipo csv possui dois elementos básicos que podem influenciar na importação:
o separador decimal
a tabulação (ou separador de colunas)
No formato regional brasileiro, o separador decimal é a vírgula “(,)” e o separador de coluna é o ponto e vírgula “(;)”. Já no formato americano, utiliza-se o ponto “(.)” como separador decimal e a vírgula “(,)” como separador de colunas. Durante a importação de uma planilha eletrônica, pode ser necessário informar qual o separador decimal e qual o separador de colunas utilizados no arquivo, para que a leitura dos dados pelo R ocorra sem problemas.
Dois comandos podem ser utilizados para importar os dados:
read.csv(arquivo, sep=..., dec=...)
read.table(arquivo, sep=..., dec=...)
Ambos comandos possuem os parâmetros que definem o separador de colunas
e o separador decimal: sep para separador de colunas e
dec para separador decimal.
## null device
## 1
## [1] "D:/Users/Admin/Documents/GitHub/MAF105/maf105.github.io/Aulas_MAF105/Curso_R"
#setwd("E:/Documentos/GitHub/MAF105/maf105.github.io/Aulas_MAF105/Curso_R")#Modificar diretorio de trabalho
cat("\014")#Formato .csv e .txt - Sem a necessidade de pacote
dados1 <- read.table("Dados/CompanhiaMB_clear3.csv",dec = ",")#*Lembre-se do sep = ";"
str(dados1)## 'data.frame': 37 obs. of 1 variable:
## $ V1: chr "Registro;Estado_Civil;Grau;N_filhos;Salario;Id_Anos;Id_Meses;Procedencia" "1;solteiro;fundamental;NA;4,00;26;3;interior" "2;casado;fundamental;1;4,56;32;10;capital" "3;casado;fundamental;2;5,25;36;5;capital" ...
## 'data.frame': 37 obs. of 8 variables:
## $ V1: chr "Registro" "1" "2" "3" ...
## $ V2: chr "Estado_Civil" "solteiro" "casado" "casado" ...
## $ V3: chr "Grau" "fundamental" "fundamental" "fundamental" ...
## $ V4: chr "N_filhos" NA "1" "2" ...
## $ V5: chr "Salario" "4,00" "4,56" "5,25" ...
## $ V6: chr "Id_Anos" "26" "32" "36" ...
## $ V7: chr "Id_Meses" "3" "10" "5" ...
## $ V8: chr "Procedencia" "interior" "capital" "capital" ...
## 'data.frame': 36 obs. of 8 variables:
## $ Registro : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Estado_Civil: chr "solteiro" "casado" "casado" "solteiro" ...
## $ Grau : chr "fundamental" "fundamental" "fundamental" "medio" ...
## $ N_filhos : int NA 1 2 NA NA 0 NA NA 1 NA ...
## $ Salario : num 4 4.56 5.25 5.73 6.26 6.66 6.86 7.39 7.59 7.44 ...
## $ Id_Anos : int 26 32 36 20 40 28 41 43 34 23 ...
## $ Id_Meses : int 3 10 5 10 7 0 0 4 10 6 ...
## $ Procedencia : chr "interior" "capital" "capital" "outra" ...
dados2 <- read.table("Dados/CompanhiaMB_clear.txt",dec = ",",sep = ";",encoding="UTF-8")
str(dados2)## 'data.frame': 37 obs. of 1 variable:
## $ V1: chr "Registro Estado_Civil\t Grau\t N_filhos Salario\tId_Anos\tId_Meses\tProcedencia" "1\t solteiro\t fundamental\tNA 4,00 \t26\t3 \tinterior" "2\t casado\t fundamental\t1\t 4,56 \t32\t10\t capital" "3\t casado\t fundamental\t2\t 5,25 \t36\t5\t capital" ...
## 'data.frame': 37 obs. of 8 variables:
## $ V1: chr "Registro" "1" "2" "3" ...
## $ V2: chr "Estado_Civil" "solteiro" "casado" "casado" ...
## $ V3: chr "Grau" "fundamental" "fundamental" "fundamental" ...
## $ V4: chr "N_filhos" NA "1" "2" ...
## $ V5: chr "Salario" "4,00" "4,56" "5,25" ...
## $ V6: chr "Id_Anos" "26" "32" "36" ...
## $ V7: chr "Id_Meses" "3" "10" "5" ...
## $ V8: chr "Procedencia" "interior" "capital" "capital" ...
dados2 <- read.table("Dados/CompanhiaMB_clear.txt", encoding="UTF-8", sep="",header = TRUE,dec = ",")
str(dados2)## 'data.frame': 36 obs. of 8 variables:
## $ Registro : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Estado_Civil: chr "solteiro" "casado" "casado" "solteiro" ...
## $ Grau : chr "fundamental" "fundamental" "fundamental" "medio" ...
## $ N_filhos : int NA 1 2 NA NA 0 NA NA 1 NA ...
## $ Salario : num 4 4.56 5.25 5.73 6.26 6.66 6.86 7.39 7.59 7.44 ...
## $ Id_Anos : int 26 32 36 20 40 28 41 43 34 23 ...
## $ Id_Meses : int 3 10 5 10 7 0 0 4 10 6 ...
## $ Procedencia : chr "interior" "capital" "capital" "outra" ...
names(dados2) <- c("Registro","Estado_Civil","Grau","N_filhos","Salario","Id_Anos","Id_Meses","Procedencia")
head(dados2)## Registro Estado_Civil Grau N_filhos Salario Id_Anos Id_Meses
## 1 1 solteiro fundamental NA 4.00 26 3
## 2 2 casado fundamental 1 4.56 32 10
## 3 3 casado fundamental 2 5.25 36 5
## 4 4 solteiro medio NA 5.73 20 10
## 5 5 solteiro fundamental NA 6.26 40 7
## 6 6 casado fundamental 0 6.66 28 0
## Procedencia
## 1 interior
## 2 capital
## 3 capital
## 4 outra
## 5 outra
## 6 interior
Outras Funções
#Formato .csv e .txt - Sem a necessidade de pacote
dados1 <- read.csv("Dados/CompanhiaMB_clear3.csv",dec = ",")#*Lembre-se do sep = ";"
str(dados1)## 'data.frame': 36 obs. of 1 variable:
## $ Registro.Estado_Civil.Grau.N_filhos.Salario.Id_Anos.Id_Meses.Procedencia: chr "00;26;3;interior" "56;32;10;capital" "25;36;5;capital" "73;20;10;outra" ...
## 'data.frame': 36 obs. of 8 variables:
## $ Registro : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Estado_Civil: chr "solteiro" "casado" "casado" "solteiro" ...
## $ Grau : chr "fundamental" "fundamental" "fundamental" "medio" ...
## $ N_filhos : int NA 1 2 NA NA 0 NA NA 1 NA ...
## $ Salario : num 4 4.56 5.25 5.73 6.26 6.66 6.86 7.39 7.59 7.44 ...
## $ Id_Anos : int 26 32 36 20 40 28 41 43 34 23 ...
## $ Id_Meses : int 3 10 5 10 7 0 0 4 10 6 ...
## $ Procedencia : chr "interior" "capital" "capital" "outra" ...
## 'data.frame': 36 obs. of 1 variable:
## $ Registro..Estado_Civil...Grau.........N_filhos.Salario.Id_Anos.Id_Meses.Procedencia: chr "1\t solteiro\t fundamental\tNA 4,00 \t26\t3 \tinterior" "2\t casado\t fundamental\t1\t 4,56 \t32\t10\t capital" "3\t casado\t fundamental\t2\t 5,25 \t36\t5\t capital" "4\t solteiro\t medio\t NA\t 5,73 \t20\t10\t outra" ...
## 'data.frame': 36 obs. of 8 variables:
## $ Registro : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Estado_Civil: chr "solteiro" "casado" "casado" "solteiro" ...
## $ Grau : chr "fundamental" "fundamental" "fundamental" "medio" ...
## $ N_filhos : int NA 1 2 NA NA 0 NA NA 1 NA ...
## $ Salario : num 4 4.56 5.25 5.73 6.26 6.66 6.86 7.39 7.59 7.44 ...
## $ Id_Anos : int 26 32 36 20 40 28 41 43 34 23 ...
## $ Id_Meses : int 3 10 5 10 7 0 0 4 10 6 ...
## $ Procedencia : chr "interior" "capital" "capital" "outra" ...
names(dados2) <- c("Registro","Estado_Civil","Grau","N_filhos","Salario","Id_Anos","Id_Meses","Procedencia")read.csv()eread.csv2()As funções
read.csv()eread.csv2()são freqüentemente usadas para salvar conjuntos de dados no Excel.csvou em Valores Separados por Vírgula.read.csv()eread.csv2()temos diferentes símbolos separadores: para o primeiro, é uma vírgula, enquanto o segundo usa um ponto e vírgula. Tudo se resolve ao usarsep=";"quando necessário.- Usando pacotes
#Pacote para a leitura de .xlsx e .xls
library(readxl)
dados3<- read_excel("Dados/CompanhiaMB_clear.xlsx")
str(dados3)## tibble [36 × 8] (S3: tbl_df/tbl/data.frame)
## $ Registro : num [1:36] 1 2 3 4 5 6 7 8 9 10 ...
## $ Estado_Civil: chr [1:36] "solteiro" "casado" "casado" "solteiro" ...
## $ Grau : chr [1:36] "fundamental" "fundamental" "fundamental" "medio" ...
## $ N_filhos : chr [1:36] "NA" "1" "2" "NA" ...
## $ Salario : num [1:36] 4 4.56 5.25 5.73 6.26 6.66 6.86 7.39 7.59 7.44 ...
## $ Id_Anos : num [1:36] 26 32 36 20 40 28 41 43 34 23 ...
## $ Id_Meses : num [1:36] 3 10 5 10 7 0 0 4 10 6 ...
## $ Procedencia : chr [1:36] "interior" "capital" "capital" "outra" ...
dados4 <- read_excel("Dados/CompanhiaMB_clear2.xls",col_types = c("numeric", "text", "text","text", "numeric", "numeric", "numeric","text"))
str(dados4)## tibble [36 × 8] (S3: tbl_df/tbl/data.frame)
## $ Registro : num [1:36] 1 2 3 4 5 6 7 8 9 10 ...
## $ Estado_Civil: chr [1:36] "solteiro" "casado" "casado" "solteiro" ...
## $ Grau : chr [1:36] "fundamental" "fundamental" "fundamental" "medio" ...
## $ N_filhos : chr [1:36] "NA" "1" "2" "NA" ...
## $ Salario : num [1:36] 4 4.56 5.25 5.73 6.26 6.66 6.86 7.39 7.59 7.44 ...
## $ Id_Anos : num [1:36] 26 32 36 20 40 28 41 43 34 23 ...
## $ Id_Meses : num [1:36] 3 10 5 10 7 0 0 4 10 6 ...
## $ Procedencia : chr [1:36] "interior" "capital" "capital" "outra" ...
#Pacote para a leitura de .txt e .csv
library(readr)
dados5 <- read_delim("Dados/CompanhiaMB_clear3.csv",";", escape_double = FALSE, trim_ws = TRUE)
str(dados5)## spc_tbl_ [36 × 8] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ Registro : num [1:36] 1 2 3 4 5 6 7 8 9 10 ...
## $ Estado_Civil: chr [1:36] "solteiro" "casado" "casado" "solteiro" ...
## $ Grau : chr [1:36] "fundamental" "fundamental" "fundamental" "medio" ...
## $ N_filhos : num [1:36] NA 1 2 NA NA 0 NA NA 1 NA ...
## $ Salario : num [1:36] 400 456 525 573 626 666 686 739 759 744 ...
## $ Id_Anos : num [1:36] 26 32 36 20 40 28 41 43 34 23 ...
## $ Id_Meses : num [1:36] 3 10 5 10 7 0 0 4 10 6 ...
## $ Procedencia : chr [1:36] "interior" "capital" "capital" "outra" ...
## - attr(*, "spec")=
## .. cols(
## .. Registro = col_double(),
## .. Estado_Civil = col_character(),
## .. Grau = col_character(),
## .. N_filhos = col_double(),
## .. Salario = col_number(),
## .. Id_Anos = col_double(),
## .. Id_Meses = col_double(),
## .. Procedencia = col_character()
## .. )
## - attr(*, "problems")=<externalptr>
dados6 <- read_delim("Dados/CompanhiaMB_clear3.csv",";", escape_double = FALSE, trim_ws = TRUE,locale = locale(decimal_mark = ","))
str(dados6)## spc_tbl_ [36 × 8] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ Registro : num [1:36] 1 2 3 4 5 6 7 8 9 10 ...
## $ Estado_Civil: chr [1:36] "solteiro" "casado" "casado" "solteiro" ...
## $ Grau : chr [1:36] "fundamental" "fundamental" "fundamental" "medio" ...
## $ N_filhos : num [1:36] NA 1 2 NA NA 0 NA NA 1 NA ...
## $ Salario : num [1:36] 4 4.56 5.25 5.73 6.26 6.66 6.86 7.39 7.59 7.44 ...
## $ Id_Anos : num [1:36] 26 32 36 20 40 28 41 43 34 23 ...
## $ Id_Meses : num [1:36] 3 10 5 10 7 0 0 4 10 6 ...
## $ Procedencia : chr [1:36] "interior" "capital" "capital" "outra" ...
## - attr(*, "spec")=
## .. cols(
## .. Registro = col_double(),
## .. Estado_Civil = col_character(),
## .. Grau = col_character(),
## .. N_filhos = col_double(),
## .. Salario = col_double(),
## .. Id_Anos = col_double(),
## .. Id_Meses = col_double(),
## .. Procedencia = col_character()
## .. )
## - attr(*, "problems")=<externalptr>
Antes de iniciar as análises com os dados importados, sempre desconfie!
Inspecione o objeto que recebeu os dados importados para garantir que não houve problemas com o separador decimal, nem com o separador de colunas, nem com os nomes das colunas. Diversos comandos podem ser usados para investigar os dados. Veja alguns exemplos:
- Veja se o número de linhas e colunas correspondem à planilha eletrônica importada:
## [1] 36 8
## [1] 36 8
## [1] 36 8
## [1] 36 8
## [1] 36 8
## [1] 36 8
- Veja o formato das varáveis
## 'data.frame': 36 obs. of 8 variables:
## $ Registro : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Estado_Civil: chr "solteiro" "casado" "casado" "solteiro" ...
## $ Grau : chr "fundamental" "fundamental" "fundamental" "medio" ...
## $ N_filhos : int NA 1 2 NA NA 0 NA NA 1 NA ...
## $ Salario : num 4 4.56 5.25 5.73 6.26 6.66 6.86 7.39 7.59 7.44 ...
## $ Id_Anos : int 26 32 36 20 40 28 41 43 34 23 ...
## $ Id_Meses : int 3 10 5 10 7 0 0 4 10 6 ...
## $ Procedencia : chr "interior" "capital" "capital" "outra" ...
## 'data.frame': 36 obs. of 8 variables:
## $ Registro : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Estado_Civil: chr "solteiro" "casado" "casado" "solteiro" ...
## $ Grau : chr "fundamental" "fundamental" "fundamental" "medio" ...
## $ N_filhos : int NA 1 2 NA NA 0 NA NA 1 NA ...
## $ Salario : num 4 4.56 5.25 5.73 6.26 6.66 6.86 7.39 7.59 7.44 ...
## $ Id_Anos : int 26 32 36 20 40 28 41 43 34 23 ...
## $ Id_Meses : int 3 10 5 10 7 0 0 4 10 6 ...
## $ Procedencia : chr "interior" "capital" "capital" "outra" ...
## tibble [36 × 8] (S3: tbl_df/tbl/data.frame)
## $ Registro : num [1:36] 1 2 3 4 5 6 7 8 9 10 ...
## $ Estado_Civil: chr [1:36] "solteiro" "casado" "casado" "solteiro" ...
## $ Grau : chr [1:36] "fundamental" "fundamental" "fundamental" "medio" ...
## $ N_filhos : chr [1:36] "NA" "1" "2" "NA" ...
## $ Salario : num [1:36] 4 4.56 5.25 5.73 6.26 6.66 6.86 7.39 7.59 7.44 ...
## $ Id_Anos : num [1:36] 26 32 36 20 40 28 41 43 34 23 ...
## $ Id_Meses : num [1:36] 3 10 5 10 7 0 0 4 10 6 ...
## $ Procedencia : chr [1:36] "interior" "capital" "capital" "outra" ...
## tibble [36 × 8] (S3: tbl_df/tbl/data.frame)
## $ Registro : num [1:36] 1 2 3 4 5 6 7 8 9 10 ...
## $ Estado_Civil: chr [1:36] "solteiro" "casado" "casado" "solteiro" ...
## $ Grau : chr [1:36] "fundamental" "fundamental" "fundamental" "medio" ...
## $ N_filhos : chr [1:36] "NA" "1" "2" "NA" ...
## $ Salario : num [1:36] 4 4.56 5.25 5.73 6.26 6.66 6.86 7.39 7.59 7.44 ...
## $ Id_Anos : num [1:36] 26 32 36 20 40 28 41 43 34 23 ...
## $ Id_Meses : num [1:36] 3 10 5 10 7 0 0 4 10 6 ...
## $ Procedencia : chr [1:36] "interior" "capital" "capital" "outra" ...
## spc_tbl_ [36 × 8] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ Registro : num [1:36] 1 2 3 4 5 6 7 8 9 10 ...
## $ Estado_Civil: chr [1:36] "solteiro" "casado" "casado" "solteiro" ...
## $ Grau : chr [1:36] "fundamental" "fundamental" "fundamental" "medio" ...
## $ N_filhos : num [1:36] NA 1 2 NA NA 0 NA NA 1 NA ...
## $ Salario : num [1:36] 400 456 525 573 626 666 686 739 759 744 ...
## $ Id_Anos : num [1:36] 26 32 36 20 40 28 41 43 34 23 ...
## $ Id_Meses : num [1:36] 3 10 5 10 7 0 0 4 10 6 ...
## $ Procedencia : chr [1:36] "interior" "capital" "capital" "outra" ...
## - attr(*, "spec")=
## .. cols(
## .. Registro = col_double(),
## .. Estado_Civil = col_character(),
## .. Grau = col_character(),
## .. N_filhos = col_double(),
## .. Salario = col_number(),
## .. Id_Anos = col_double(),
## .. Id_Meses = col_double(),
## .. Procedencia = col_character()
## .. )
## - attr(*, "problems")=<externalptr>
## spc_tbl_ [36 × 8] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ Registro : num [1:36] 1 2 3 4 5 6 7 8 9 10 ...
## $ Estado_Civil: chr [1:36] "solteiro" "casado" "casado" "solteiro" ...
## $ Grau : chr [1:36] "fundamental" "fundamental" "fundamental" "medio" ...
## $ N_filhos : num [1:36] NA 1 2 NA NA 0 NA NA 1 NA ...
## $ Salario : num [1:36] 4 4.56 5.25 5.73 6.26 6.66 6.86 7.39 7.59 7.44 ...
## $ Id_Anos : num [1:36] 26 32 36 20 40 28 41 43 34 23 ...
## $ Id_Meses : num [1:36] 3 10 5 10 7 0 0 4 10 6 ...
## $ Procedencia : chr [1:36] "interior" "capital" "capital" "outra" ...
## - attr(*, "spec")=
## .. cols(
## .. Registro = col_double(),
## .. Estado_Civil = col_character(),
## .. Grau = col_character(),
## .. N_filhos = col_double(),
## .. Salario = col_double(),
## .. Id_Anos = col_double(),
## .. Id_Meses = col_double(),
## .. Procedencia = col_character()
## .. )
## - attr(*, "problems")=<externalptr>
- Confira se as primeiras linhas dos dados importados correspondem às primeiras linhas do arquivo original:
## Registro Estado_Civil Grau N_filhos Salario Id_Anos Id_Meses
## 1 1 solteiro fundamental NA 4.00 26 3
## 2 2 casado fundamental 1 4.56 32 10
## 3 3 casado fundamental 2 5.25 36 5
## 4 4 solteiro medio NA 5.73 20 10
## 5 5 solteiro fundamental NA 6.26 40 7
## 6 6 casado fundamental 0 6.66 28 0
## Procedencia
## 1 interior
## 2 capital
## 3 capital
## 4 outra
## 5 outra
## 6 interior
## Registro Estado_Civil Grau N_filhos Salario Id_Anos Id_Meses
## 1 1 solteiro fundamental NA 4.00 26 3
## 2 2 casado fundamental 1 4.56 32 10
## 3 3 casado fundamental 2 5.25 36 5
## 4 4 solteiro medio NA 5.73 20 10
## 5 5 solteiro fundamental NA 6.26 40 7
## 6 6 casado fundamental 0 6.66 28 0
## Procedencia
## 1 interior
## 2 capital
## 3 capital
## 4 outra
## 5 outra
## 6 interior
## # A tibble: 6 × 8
## Registro Estado_Civil Grau N_filhos Salario Id_Anos Id_Meses Procedencia
## <dbl> <chr> <chr> <chr> <dbl> <dbl> <dbl> <chr>
## 1 1 solteiro fundament… NA 4 26 3 interior
## 2 2 casado fundament… 1 4.56 32 10 capital
## 3 3 casado fundament… 2 5.25 36 5 capital
## 4 4 solteiro medio NA 5.73 20 10 outra
## 5 5 solteiro fundament… NA 6.26 40 7 outra
## 6 6 casado fundament… 0 6.66 28 0 interior
## # A tibble: 6 × 8
## Registro Estado_Civil Grau N_filhos Salario Id_Anos Id_Meses Procedencia
## <dbl> <chr> <chr> <chr> <dbl> <dbl> <dbl> <chr>
## 1 1 solteiro fundament… NA 4 26 3 interior
## 2 2 casado fundament… 1 4.56 32 10 capital
## 3 3 casado fundament… 2 5.25 36 5 capital
## 4 4 solteiro medio NA 5.73 20 10 outra
## 5 5 solteiro fundament… NA 6.26 40 7 outra
## 6 6 casado fundament… 0 6.66 28 0 interior
## # A tibble: 6 × 8
## Registro Estado_Civil Grau N_filhos Salario Id_Anos Id_Meses Procedencia
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <chr>
## 1 1 solteiro fundament… NA 400 26 3 interior
## 2 2 casado fundament… 1 456 32 10 capital
## 3 3 casado fundament… 2 525 36 5 capital
## 4 4 solteiro medio NA 573 20 10 outra
## 5 5 solteiro fundament… NA 626 40 7 outra
## 6 6 casado fundament… 0 666 28 0 interior
## # A tibble: 6 × 8
## Registro Estado_Civil Grau N_filhos Salario Id_Anos Id_Meses Procedencia
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <chr>
## 1 1 solteiro fundament… NA 4 26 3 interior
## 2 2 casado fundament… 1 4.56 32 10 capital
## 3 3 casado fundament… 2 5.25 36 5 capital
## 4 4 solteiro medio NA 5.73 20 10 outra
## 5 5 solteiro fundament… NA 6.26 40 7 outra
## 6 6 casado fundament… 0 6.66 28 0 interior
- Você também pode conferir as últimas linhas dos dados importados através do comando:
## # A tibble: 6 × 8
## Registro Estado_Civil Grau N_filhos Salario Id_Anos Id_Meses Procedencia
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <chr>
## 1 31 solteiro superior NA 16.2 31 5 outra
## 2 32 casado medio 1 16.6 36 4 interior
## 3 33 casado superior 3 17.3 43 7 capital
## 4 34 solteiro superior NA 18.8 33 7 capital
## 5 35 casado medio 2 19.4 48 11 capital
## 6 36 casado superior 3 23.3 42 2 interior
- Veja o sumário estatísticos dos dados e veja se as colunas de números e textos foram corretamente importados:
## Registro Estado_Civil Grau N_filhos
## Min. : 1.00 Length:36 Length:36 Min. :0.00
## 1st Qu.: 9.75 Class :character Class :character 1st Qu.:1.00
## Median :18.50 Mode :character Mode :character Median :2.00
## Mean :18.50 Mean :1.65
## 3rd Qu.:27.25 3rd Qu.:2.00
## Max. :36.00 Max. :5.00
## NA's :16
## Salario Id_Anos Id_Meses Procedencia
## Min. : 4.000 Min. :20.00 Min. : 0.000 Length:36
## 1st Qu.: 7.553 1st Qu.:30.00 1st Qu.: 3.750 Class :character
## Median :10.165 Median :34.50 Median : 6.000 Mode :character
## Mean :11.122 Mean :34.58 Mean : 5.611
## 3rd Qu.:14.060 3rd Qu.:40.00 3rd Qu.: 8.000
## Max. :23.300 Max. :48.00 Max. :11.000
##
## Registro Estado_Civil Grau N_filhos
## Min. : 1.00 Length:36 Length:36 Min. :0.00
## 1st Qu.: 9.75 Class :character Class :character 1st Qu.:1.00
## Median :18.50 Mode :character Mode :character Median :2.00
## Mean :18.50 Mean :1.65
## 3rd Qu.:27.25 3rd Qu.:2.00
## Max. :36.00 Max. :5.00
## NA's :16
## Salario Id_Anos Id_Meses Procedencia
## Min. : 4.000 Min. :20.00 Min. : 0.000 Length:36
## 1st Qu.: 7.553 1st Qu.:30.00 1st Qu.: 3.750 Class :character
## Median :10.165 Median :34.50 Median : 6.000 Mode :character
## Mean :11.122 Mean :34.58 Mean : 5.611
## 3rd Qu.:14.060 3rd Qu.:40.00 3rd Qu.: 8.000
## Max. :23.300 Max. :48.00 Max. :11.000
##
## Registro Estado_Civil Grau N_filhos
## Min. : 1.00 Length:36 Length:36 Length:36
## 1st Qu.: 9.75 Class :character Class :character Class :character
## Median :18.50 Mode :character Mode :character Mode :character
## Mean :18.50
## 3rd Qu.:27.25
## Max. :36.00
## Salario Id_Anos Id_Meses Procedencia
## Min. : 4.000 Min. :20.00 Min. : 0.000 Length:36
## 1st Qu.: 7.553 1st Qu.:30.00 1st Qu.: 3.750 Class :character
## Median :10.165 Median :34.50 Median : 6.000 Mode :character
## Mean :11.122 Mean :34.58 Mean : 5.611
## 3rd Qu.:14.060 3rd Qu.:40.00 3rd Qu.: 8.000
## Max. :23.300 Max. :48.00 Max. :11.000
## Registro Estado_Civil Grau N_filhos
## Min. : 1.00 Length:36 Length:36 Length:36
## 1st Qu.: 9.75 Class :character Class :character Class :character
## Median :18.50 Mode :character Mode :character Mode :character
## Mean :18.50
## 3rd Qu.:27.25
## Max. :36.00
## Salario Id_Anos Id_Meses Procedencia
## Min. : 4.000 Min. :20.00 Min. : 0.000 Length:36
## 1st Qu.: 7.553 1st Qu.:30.00 1st Qu.: 3.750 Class :character
## Median :10.165 Median :34.50 Median : 6.000 Mode :character
## Mean :11.122 Mean :34.58 Mean : 5.611
## 3rd Qu.:14.060 3rd Qu.:40.00 3rd Qu.: 8.000
## Max. :23.300 Max. :48.00 Max. :11.000
## Registro Estado_Civil Grau N_filhos
## Min. : 1.00 Length:36 Length:36 Min. :0.00
## 1st Qu.: 9.75 Class :character Class :character 1st Qu.:1.00
## Median :18.50 Mode :character Mode :character Median :2.00
## Mean :18.50 Mean :1.65
## 3rd Qu.:27.25 3rd Qu.:2.00
## Max. :36.00 Max. :5.00
## NA's :16
## Salario Id_Anos Id_Meses Procedencia
## Min. : 400.0 Min. :20.00 Min. : 0.000 Length:36
## 1st Qu.: 755.2 1st Qu.:30.00 1st Qu.: 3.750 Class :character
## Median :1016.5 Median :34.50 Median : 6.000 Mode :character
## Mean :1112.2 Mean :34.58 Mean : 5.611
## 3rd Qu.:1406.0 3rd Qu.:40.00 3rd Qu.: 8.000
## Max. :2330.0 Max. :48.00 Max. :11.000
##
## Registro Estado_Civil Grau N_filhos
## Min. : 1.00 Length:36 Length:36 Min. :0.00
## 1st Qu.: 9.75 Class :character Class :character 1st Qu.:1.00
## Median :18.50 Mode :character Mode :character Median :2.00
## Mean :18.50 Mean :1.65
## 3rd Qu.:27.25 3rd Qu.:2.00
## Max. :36.00 Max. :5.00
## NA's :16
## Salario Id_Anos Id_Meses Procedencia
## Min. : 4.000 Min. :20.00 Min. : 0.000 Length:36
## 1st Qu.: 7.553 1st Qu.:30.00 1st Qu.: 3.750 Class :character
## Median :10.165 Median :34.50 Median : 6.000 Mode :character
## Mean :11.122 Mean :34.58 Mean : 5.611
## 3rd Qu.:14.060 3rd Qu.:40.00 3rd Qu.: 8.000
## Max. :23.300 Max. :48.00 Max. :11.000
##
Help me!
No R, há quatro principais entidades para se pedir ajuda:
Help/documentação do R (comandos
help(nome_da_funcao)ou?nome_da_funcao)Google
Stack Overflow
whatsapp, telegram, facebook e até no instagram!
A busca por ajuda é feita preferencialmente, mas não necessariamente, na ordem acima.
Você também pode pedir ajuda a um colega!!!
–
Documentação do R
A documentação do R serve para você aprender a usar uma determinada função.
Cinco dicas:
- Os exemplos no final são particularmente úteis.
- Leia a seção Usage para ter noção de como usar.
- Os parâmetros estão descritos em Arguments. Identifique quais tipos de objetos eles recebem.
- Caso essa função não atenda às suas necessidades, a seção See Also sugere funções relacionadas.
- Alguns pacotes possuem tutorias de uso mais completos. Esses textos
são chamados de
vignettese podem ser acessados com a funçãovignette(package = 'nomeDoPacote'). Por exemplo,vignette(package = 'dplyr'). Depois de ver a lista de artigos, escolha um nome e rodevignette(topic = 'nome', package = 'nomeDoPacote'). Por exemplo,vignette(topic = 'introduction', package = 'dplyr').
Resumo de Dados
Distribuições de Frequência
tab2_1 <- read.table("Dados/CompanhiaMB_clear3.csv",dec = ",",sep = ";",header = TRUE)
ni<-table(tab2_1$Grau) # Calcula a tabela de frequências absolutas e armazena o resultado em 'mytab'
fi<-prop.table(ni) # Tabela de frequências relativas (f_i)
p_fi<-100*prop.table(ni) # Porcentagem (100 f_i)
# Adiciona linhas de total
ni<-c(ni,sum(ni))
fi<-c(fi,sum(fi))
p_fi<-c(p_fi,sum(p_fi))
names(ni)[4]<-"Total"Para ter o resultado na mesma disposição que na Tabela 2.2, podemos fazer da seguinte forma:
## ni fi p_fi
## fundamental 12 0.33 33.33
## medio 18 0.50 50.00
## superior 6 0.17 16.67
## Total 36 1.00 100.00
#quebras de linha apenas ilustrativas para facilitar a leitura
tab2_3<-as.data.frame(
t(rbind(
ni=c(650,1020,330,2000),
p_fi=c(32.5,51,16.5,1)
))
,row.names =c("Fundamental","Médio","Superior","Total")
)
tab2_3## ni p_fi
## Fundamental 650 32.5
## Médio 1020 51.0
## Superior 330 16.5
## Total 2000 1.0
ni<-table(cut(tab2_1$Salario, breaks = seq(4,24,by=4),right=FALSE)) # Frequencias por categorias
tab2_4 <- rbind(ni, p_fi = 100*prop.table(ni)) # Frequencias relativas em %
#quebras de linha apenas ilustrativas para facilitar a leitura
tab2_4 <- as.data.frame(
t(cbind(
tab2_4,
c(sum(tab2_4[1,]),sum(tab2_4[2,])
))),row.names =c(colnames(tab2_4),"Total")) #Construcao da tabela
tab2_4<-transform(tab2_4,p_fi=round(p_fi,digits=2))
tab2_4## ni p_fi
## [4,8) 10 27.78
## [8,12) 12 33.33
## [12,16) 8 22.22
## [16,20) 5 13.89
## [20,24) 1 2.78
## Total 36 100.00
Ramos e Folhas
## [1] "Figura 2.9: Ramo-e-folhas para a Variável S: salários."
##
## The decimal point is at the |
##
## 4 | 06
## 5 | 37
## 6 | 379
## 7 | 446
## 8 | 157
## 9 | 01488
## 10 | 58
## 11 | 16
## 12 | 08
## 13 | 269
## 14 | 77
## 15 |
## 16 | 026
## 17 | 3
## 18 | 8
## 19 | 4
## 20 |
## 21 |
## 22 |
## 23 | 3
#quebras de linha apenas ilustrativas para facilitar a leitura
dureza<-c(53 ,70.2,84.3,69.5,77.8,87.5,53.4,82.5,67.3,54.1,
70.5,71.4,95.4,51.1,74.4,55.7,63.5,85.8,53.5,64.3,
82.7,78.5,55.7,69.1,72.3,59.5,55.3,73 ,52.4,50.7
)
print("Figura 2.10: Ramo-e-folhas para dados de dureza de peças de alumínio.")## [1] "Figura 2.10: Ramo-e-folhas para dados de dureza de peças de alumínio."
##
## The decimal point is 1 digit(s) to the right of the |
##
## 5 | 01233345559
## 6 | 34799
## 7 | 00123478
## 8 | 22457
## 9 | 5
## [1] "Figura 2.11: Ramo-e-folhas para dados de dureza, com ramos divididos."
##
## The decimal point is 1 digit(s) to the right of the |
##
## 5 | 0123334
## 5 | 5559
## 6 | 34
## 6 | 799
## 7 | 001234
## 7 | 78
## 8 | 224
## 8 | 57
## 9 |
## 9 | 5
Representação Gráfica
Gráfico de barras
#quebras de linha apenas ilustrativas para facilitar a leitura
barplot(
table(tab2_1$Grau),
ylab="Frequência",
cex.names=0.7,
names.arg = c("Fundamental","Médio", "Superior"),
col="darkgrey",
border=NA,
main="Figura 2.2: Gráfico em barras para a variável Y: grau de instrução.",
axes=TRUE,
ylim=c(0,20)
)#quebras de linha apenas ilustrativas para facilitar a leitura
barplot(
table(tab2_1$N_filhos),
ylab="Frequência",
cex.names=0.7,
col="darkgrey",
main="Figura 2.4: Gráfico em barras para a variável Z: Numero de filhos.",
border=NA)#quebras de linha apenas ilustrativas para facilitar a leitura
barplot(
table(cut(tab2_1$Salario, breaks = seq(4,24,by=4),right=FALSE)),
ylab="Frequência",
xaxt="n",
cex.names=0.7,
col="darkgrey",
border=NA,
main="Figura 2.6: Gráfico em barras para a variável S: salários")
axis(1,at=c(.75,1.9,3.1,4.3,5.5),labels=seq(6,22,4),tick=F)Gráfico de setores (pizza)
labs<-paste(1:3,"(",tab2_2[1:3,1],";",round(tab2_2[1:3,3],1),"%)",sep="")
pie(table(tab2_1$Grau),labels=labs)
#title("Figura 2.3: Gráfico em setores para a variável Y: grau de instrução")
legend(-1.1,-0.8,legend=c("1=Fundamental, 2=Médio, 3=Superior"),border=NA,box.col=NA)Histograma
fig27<-hist(tab2_1$Salario, breaks = seq(4,24,by=4),right=FALSE,probability = T,plot=F)
aux<-with(fig27, 100 * density* diff(breaks)[1])
labs <- paste(round(aux), "%", sep="")
#quebras de linha apenas ilustrativas para facilitar a leitura
plot(fig27,
freq = FALSE, labels = labs,
ylab="Densidade de Frequência",
xlab="Salário",
col="darkgrey",
border="white",
#labels=T,
main="Figura 2.7: Histograma da variável S: salários",
xlim=c(0,24), xaxp=c(0,24,6),
ylim=c(0,.1))fig28<-hist(tab2_1$N_filhos, right=F, breaks=seq(-.5,5.5,1),plot=F)
aux<-with(fig28, 100 * density* diff(breaks)[1])
labs <- paste(round(aux), "%", sep="")
#quebras de linha apenas ilustrativas para facilitar a leitura
plot(fig28,
ylab="Densidade de Frequência",
xlab="Número de Filhos",
col="darkgrey",
border="white",
bty="n",yaxt="n",ylim=c(0,8),
main="Figura 2.8: Histograma da variável Z: número de filhos",
labels=labs)Referências e recomendações
curso-r: Descomplicando a ciência de dados. Site e blog com muito material. Os integrantes são extremamente pró-ativos.
RPubs. Comandos R para análises estatísticas de exercicíos e teoria do livro Estatística Básica(Bussab e Morettin, 2013)
Oliveira, P. F., Guerra, S., McDonnell, R. Ciência de dados com R: Introdução – Brasília: Editora IBPAD, 2018. (Livro muito bom e gratuito)